#!/bin/bash
# 存储准备脚本
# 功能：创建数据目录、StorageClass 和 PersistentVolume

set -Eeuo pipefail

# 日志函数
log() { echo -e "$(date +'%F %T') | $*"; }
warn() { echo -e "$(date +'%F %T') | WARNING: $*" >&2; }
err() { echo -e "$(date +'%F %T') | ERROR: $*" >&2; }
trap 'err "脚本出错（行号: $LINENO）"' ERR

log "=========================================="
log "准备 Kubernetes 存储"
log "=========================================="

# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then 
    err "请使用 root 用户运行此脚本"
    exit 1
fi

# 设置 KUBECONFIG 环境变量（k3s 配置）
if [ -f /etc/rancher/k3s/k3s.yaml ]; then
    export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
    # 确保文件权限正确
    chmod 644 /etc/rancher/k3s/k3s.yaml 2>/dev/null || true
    log "✓ 使用 KUBECONFIG: /etc/rancher/k3s/k3s.yaml"
elif [ -f /root/.kube/config ]; then
    export KUBECONFIG=/root/.kube/config
    log "✓ 使用 KUBECONFIG: /root/.kube/config"
else
    err "无法找到 k3s 配置文件"
    log "请先运行: sudo bash scripts/k8s/setup-k8s.sh"
    exit 1
fi

# 验证 kubectl 可以连接集群
log "验证 kubectl 连接..."
# 使用 cluster-info 检查连接，比 get nodes 更可靠
if ! kubectl cluster-info > /dev/null 2>&1; then
    err "kubectl 无法连接到 Kubernetes 集群"
    log "请检查："
    log "1. k3s 服务是否运行: systemctl status k3s"
    log "2. k3s 配置文件是否存在: ls -la /etc/rancher/k3s/k3s.yaml"
    log "3. 当前 KUBECONFIG: $KUBECONFIG"
    log "试试直接运行: export KUBECONFIG=/etc/rancher/k3s/k3s.yaml && kubectl get nodes"
    exit 1
fi
log "✓ kubectl 可以连接到集群"

# 1. 创建数据目录
log "[1/3] 创建数据目录..."
mkdir -p /data/mysql
mkdir -p /data/postgresql
mkdir -p /data/redis/master
mkdir -p /data/redis/slave-0
mkdir -p /data/redis/slave-1
log "✓ 数据目录已创建:"
log "  - /data/mysql"
log "  - /data/postgresql"
log "  - /data/redis/{master,slave-0,slave-1}"

# 2. 设置目录权限
log "[2/3] 设置目录权限..."
# 数据库容器用户 UID:999 (mysql/postgres/redis)
chown -R 999:999 /data/mysql
chown -R 999:999 /data/postgresql
chown -R 999:999 /data/redis
# 设置安全权限：owner 读写执行，group 读执行，其他无权限
chmod -R 750 /data/mysql
chmod -R 750 /data/postgresql
chmod -R 750 /data/redis
log "✓ 目录权限已配置:"
log "  - Owner: UID 999 (数据库用户)"
log "  - Permissions: 750 (rwxr-x---)"

# 3. 创建 StorageClass 和 PV
log "[3/3] 创建 StorageClass 和 PersistentVolume..."
kubectl apply -f k8s/storage/storageclass.yaml
kubectl apply -f k8s/storage/pv.yaml
log "✓ StorageClass 和 PV 已创建"

# 验证
log ""
log "=========================================="
log "验证存储配置..."
log "=========================================="
log "StorageClass:"
kubectl get storageclass
log ""
log "PersistentVolume:"
kubectl get pv

log ""
log "=========================================="
log "存储准备完成！"
log "=========================================="

